package com.tuars.instalacionesalberti.vistas.marca;

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

import com.tuars.instalacionesalberti.controllers.marca.BuscarMarca;
import com.tuars.instalacionesalberti.controllers.marca.EliminarMarca;
import com.tuars.instalacionesalberti.controllers.marca.ObtenerMarcas;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JPopupMenu;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;

import javax.swing.JMenuItem;


@SuppressWarnings("serial")
public class VistaMostrarMarca extends JPanel{
	
	private JTextField textField;
	private ObtenerMarcas marcas;
	
	private JTable tblMarca;
	private JScrollPane scpMarca;
	private DefaultTableModel dtmMarca;
	
	private JMenuItem mntmCopiar;
	private JMenuItem mntmCortar;
	private JMenuItem mntmPegar;
	private JMenuItem mntmModificar;
	
	public VistaMostrarMarca(){
		setVisible(false);
		setSize(964, 519);
		setBackground(new Color(70, 130, 180));
		setLayout(null);
		
		/**
		 * Tabla que mostrar� la base de datos
		 */
		marcas = new ObtenerMarcas();
		tblMarca = new JTable();
		scpMarca = new JScrollPane();
		
		//Llenamos el modelo
		dtmMarca = new DefaultTableModel(marcas.getFilas(), marcas.getColumnas());
		
		tblMarca.setModel(dtmMarca);
		scpMarca.add(tblMarca);
		this.add(scpMarca);
		scpMarca.setBounds(10, 62, 944, 446);
		tblMarca.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scpMarca.setViewportView(tblMarca);
				
		/**
         * Boton mostrar todos
         * este sirve para mostrar todos los registros de nuevo
         */
        final JButton btnMostrarTodos = new JButton("Mostrar todos");
		btnMostrarTodos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				recargarTabla();
		        
				btnMostrarTodos.setEnabled(false);
			}
		});
		btnMostrarTodos.setBounds(10, 11, 134, 23);
		btnMostrarTodos.setEnabled(false);
		add(btnMostrarTodos);
		
		/**
		 * Boton buscar
		 * JTextField para introducir la clausula a buscar
		 * Esta parte nos permitir� hacer busquedas en la tabla mostrada
		 */
		JButton btnBuscar = new JButton("Buscar");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String sql = "SELECT * FROM MARCA WHERE Marca LIKE '%"+textField.getText()+"%'";
				
				BuscarMarca buscarMarca = new BuscarMarca();
				
				try {
		            DefaultTableModel modelo=(DefaultTableModel) tblMarca.getModel();
		            int filas=tblMarca.getRowCount();
		            for (int i = 0;filas>i; i++) {
		                modelo.removeRow(0);
		            }
		        } catch (Exception e) {
		            JOptionPane.showMessageDialog(null, "Error al limpiar la tabla.");
		        }
				
				//Llenamos el modelo
				DefaultTableModel dtmMarca = new DefaultTableModel(buscarMarca.getFilas(sql), buscarMarca.getColumnas(sql));
				
				tblMarca.setModel(dtmMarca);
				scpMarca.add(tblMarca);
				add(scpMarca);
				scpMarca.setBounds(10, 62, 944, 446);
				
				scpMarca.setViewportView(tblMarca);
		        
				btnMostrarTodos.setEnabled(true);
			}
		});
		btnBuscar.setBounds(867, 11, 87, 23);
		add(btnBuscar);
		
		textField = new JTextField();
		textField.setBounds(752, 12, 113, 20);
		add(textField);
		textField.setColumns(10);
		
		/**
		 * PopUpMenu que nos servira para:
		 * eliminar registros
		 */
		JPopupMenu popupMenu = new JPopupMenu();
		addPopup(tblMarca, popupMenu);
		
		JMenuItem mntmEliminarMarca = new JMenuItem("Eliminar");
		mntmEliminarMarca.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
				/**
				 * Estas quatro primeras lineas eliminan el registro de la tabla
				 */
				int row = tblMarca.getSelectedRow();
				
				String registroEliminar = (String) tblMarca.getValueAt(row, 0);
				EliminarMarca eliminarMarca = new EliminarMarca();
				eliminarMarca.eliminarRegistro(registroEliminar);
				
				recargarTabla();
			}
		});
		popupMenu.add(mntmEliminarMarca);
		
		mntmModificar = new JMenuItem("Modificar");
		mntmModificar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int row = tblMarca.getSelectedRow();
				String codigoRegistroModificar = (String)tblMarca.getValueAt(row, 0);
				String nombreRegistroModificar = (String)tblMarca.getValueAt(row, 1);
				
				try {
										
					VistaModificarMarca viewModFam = new VistaModificarMarca();
					viewModFam.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
					viewModFam.setVisible(true);
					
					viewModFam.obtenerDatosCampos(codigoRegistroModificar, nombreRegistroModificar);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			}
		});
		popupMenu.add(mntmModificar);
		
		popupMenu.addSeparator();
        
        mntmCopiar = new JMenuItem("Copiar");
        popupMenu.add(mntmCopiar);
        
        mntmCortar = new JMenuItem("Cortar");
        popupMenu.add(mntmCortar);
        
        mntmPegar = new JMenuItem("Pegar");
        popupMenu.add(mntmPegar);
		
	}
	
	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
	}
	
	public void recargarTabla(){
		
		try {
            DefaultTableModel modelo=(DefaultTableModel) tblMarca.getModel();
            int filas=tblMarca.getRowCount();
            for (int i = 0;filas>i; i++) {
                modelo.removeRow(0);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al limpiar la tabla.");
        }
		
		//Llenamos el modelo
        dtmMarca = new DefaultTableModel(marcas.getFilas(), marcas.getColumnas());
        
        tblMarca.setModel(dtmMarca);
        scpMarca.add(tblMarca);
        add(scpMarca);
        scpMarca.setBounds(10, 62, 944, 446);
 
        scpMarca.setViewportView(tblMarca);
	}
}
